<?php
/* *
 * 功能：支付宝服务器异步通知页面
 * 版本：3.3
 * 日期：2012-07-23
 * 说明：
 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。


 *************************页面功能说明*************************
 * 创建该页面文件时，请留心该页面文件中无任何HTML代码及空格。
 * 该页面不能在本机电脑测试，请到服务器上做测试。请确保外部可以访问该页面。
 * 该页面调试工具请使用写文本函数logResult，该函数已被默认关闭，见alipay_notify_class.php中的函数verifyNotify
 * 如果没有收到该页面返回的 success 信息，支付宝会在24小时内按一定的时间策略重发通知
 */
//require_once("/var/www/html/new/com.inc.php");
include("/var/www/html/alipay/alipay.config.php");
include("/var/www/html/alipay/lib/alipay_notify.class.php");
if(!class_exists('go_sql')) {
    include "/var/www/html/new/conf/le.je";
    $le = new go_sql();
    $le->connect();
}
$ac = '16ucom';
$pw = 'c33367701511b4f6020ec61ded352059';

define('ACTION_MONEY_ADD',0);
define('ACTION_MONEY_CUT',1);
//$dtype=0,  // 类型 0 账户余额 1 可用供应商余额 2 信用额度
//define('TYPE_MONEY_')
function write_logs($txt,$file='/var/www/html/alipay/new_log.txt'){
    $fp = fopen($file,"a");
    flock($fp, LOCK_EX);
    fwrite($fp,date("Y-m-d H:i:s").":".$txt."\n");
    flock($fp, LOCK_UN);
    fclose($fp);
}
//$request = json_encode($_REQUEST);
//write_logs($request);
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
//write_logs('$verify_result='.$verify_result);
if($verify_result) {//验证成功
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //请在这里加上商户的业务逻辑程序代

//    write_logs('ok');

    //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
    
    //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
    
    //商户订单号

    $out_trade_no = $_POST['out_trade_no'];
    //支付宝交易号
    $trade_no = $_POST['trade_no'];
    //交易状态
    $trade_status = $_POST['trade_status'];
    if($_POST['trade_status'] == 'TRADE_FINISHED') {
        //判断该笔订单是否在商户网站中已经做过处理
            //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
            //如果有做过处理，不执行商户的业务程序
                
        //注意：
        //该种交易状态只在两种情况下出现
        //1、开通了普通即时到账，买家付款成功后。
        //2、开通了高级即时到账，从该笔交易成功时间算起，过了签约时的可退款时限（如：三个月以内可退款、一年以内可退款等）后。

        //调试用，写文本函数记录程序运行情况是否正常
//        write_logs('TRADE_FINISHED');
        logResult("1:$trade_no:$out_trade_no:$trade_status\n");
    }
    else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
        //判断该笔订单是否在商户网站中已经做过处理
            //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
            //如果有做过处理，不执行商户的业务程序
        //注意：
        //该种交易状态只在一种情况下出现——开通了高级即时到账，买家付款成功后。

        //调试用，写文本函数记录程序运行情况是否正常
        //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
//        write_logs('TRADE_SUCCESS');
        $s = new SoapClient(null,array(
            "location" => "http://localhost/open/openService/pft_insideMX.php",
            "uri" => "www.16u.com?ac_16u=$ac|pw_16u=$pw|auth_16u=true")
        );
        
         
        $str="select status,royalty_parameters,total_fee from pft_alipay_rec where out_trade_no='$out_trade_no'";
        $GLOBALS['le']->query($str);
        $GLOBALS['le']->fetch_assoc();
        $status=$GLOBALS['le']->f('status');
        $royalty_parameters=$GLOBALS['le']->f('royalty_parameters');
        $total_fee=$GLOBALS['le']->f("total_fee") * 100;
        if($GLOBALS['le']->f('status')!=1){
            $str="update pft_alipay_rec set status=1,dtime=now(),`trade_no`='$trade_no' where out_trade_no='$out_trade_no' limit 1";
            $GLOBALS['le']->query($str);
            $ordern = $out_trade_no;
            require("/var/www/html/new/d/class/OrderRecord.php");
            $or = new OrderRecord($ordern,$s);
            $orders=$or->info();
            $mainOrder=$orders['mainOrder'];
            $mid=(int)$mainOrder->UUmid;
            $aid=(int)$mainOrder->UUaid;
            //TODO::购买者账户加钱
            $s->PFT_Member_Fund_Modify($mid, 0, $total_fee, ACTION_MONEY_ADD, 0,null,0, 1,$ordern);
            //TODO::给上级供应商加钱
            $res = $s->PFT_Member_Fund_Modify($aid, 0, $total_fee, ACTION_MONEY_ADD, 0,null,0, 0,$ordern);
            sleep(1);// 解决记录同秒
            //TODO::购买者账户扣钱
            $res = $s->PFT_Member_Fund_Modify($mid, 0, $total_fee, ACTION_MONEY_CUT, 0,null,0, 1,$ordern);
            /***产品多级销售分润*****/
            $str="select aids_money from uu_order_fx_details where orderid='$ordern'";
            $GLOBALS['le']->query($str);
            $lirun = $GLOBALS['le']->fetch_assoc();
            //write_logs('$lirun=' . implode(',', $lirun));
            if ($lirun['aids_money']){
                $aids_money = unserialize($lirun['aids_money']);
                $opID = 0;
                foreach($aids_money as $row){
//                    write_logs('row=' . implode(',',$row));
                    $fid=$row[0];
//                    $dmode=($row[2]==0) ? 1 : 0;//0减少,1增加和接口相反
                    $action = ($row[2]==0) ? ACTION_MONEY_CUT : ACTION_MONEY_ADD;//0减少,1增加和接口相反
                    $Mmoney=$row[3];
                    if($row[1]==0){//信用额度
                        $dmode = 1;
                        $res = $s->PFT_Member_Fund_Modify($fid,$opID,$Mmoney,$action,$dmode,$row[4],0,2,$ordern);
//                        write_logs("\$s->PFT_Member_Fund_Modify($fid,$opID,$Mmoney,$action,$dmode,$row[4],0,2,$ordern)=" . $res);
                    }else{//资金
                        $dmode = 0;
//                        write_logs('---===自己');
//                        write_logs("\$s->PFT_Member_Fund_Modify($fid,$opID,$Mmoney,$action,$dmode,NULL,0,0,$ordern)");
                        $res = $s->PFT_Member_Fund_Modify($fid,$opID,$Mmoney,$action,$dmode,NULL,0,0,$ordern);
                    }
                }
            }
            
            /*重发短信*/
            write_logs("SendSmsManual|[$ordern]|$mid");
            if ($mid==94) {
                include '/var/www/html/new/d/class/OrderSmsManual.class.php';
                $smsManual  = new \PFT\SMS\OrderSmsManual($s);
                $ret = $smsManual->SendByOrderInfo($orders);
            } else {
                $ret = $s->reSend_SMS_Global_PL($ordern,$aid,$mid);//最后重发短信
            }
            $s->Mod_Order_Status($ordern,1,1);
            //更新远端订单号
            $updateRemote = $s->Remote_Ordernum_Update(serialize(array($ordern=>'PC_ALIPAY_PFT_'.$_SERVER['REQUEST_TIME'])));
            write_logs("RemoteOrdernumUpdate|RES={$updateRemote}|[$ordern]");
            //发送微信通知
            define('DEFAULT_WECHAT_APPID', 'wxd72be21f7455640d');//票付通公众号
            //TODO::包含全局文件
            include '/var/www/html/wx/wechat/iwx.php';
            //STEP TWO->获取openid
            $sqlWx = "SELECT fromusername FROM uu_wx_member_pft WHERE fid=$mid AND appid='".DEFAULT_WECHAT_APPID."' LIMIT 1";
            $GLOBALS['le']->query($sqlWx);
            if ($GLOBALS['le']->fetch_assoc()) {
                $wx_open_id = $GLOBALS['le']->f('fromusername');
                $data        = array(
                    'first'=> array('value'=>'订单提交成功','color'=>'#173177'),
                    'tradeDateTime'=> array('value'=>(string)$orders['mainOrder']->UUordertime,'color'=>'#173177'),
                    'orderType'=> array('value'=> '门票预定','color'=>'#ff9900'),
                    'customerInfo'=> array('value'=> (string)$orders['mainOrder']->UUordername,'color'=>'#173177'),
                    'orderItemName'=> array('value'=> (string)$orders['mainOrder']->UUltitle,'color'=>'#173177'),
                    'orderItemData'=> array('value'=> (string)$orders['mainOrder']->UUttitle . (int)$orders['mainOrder']->UUtnum .'张','color'=>'#173177'),
                    'remark'       => array('value'=> "订单号：{$ordern}",'color'=>''),
                );
                $msgRet = \LaneWeChat\Core\TemplateMessage::sendTemplateMessage($data,
                    $wx_open_id, '5QVNlRb5D9Fw3mFGIF5fhonoH42FPAbwllu5Au2013c',
                    "http://wx.12301.cc/html/order_detail.html?fromt=f542e9fac6e76f4b3b66422d49e5585c&ordernum={$ordern}",
                    '#FF0000');
            }


            /*记录分销商分润流向*/
//            $royalty_parameters=explode("|",$royalty_parameters);
//            $i=0;
//            foreach($royalty_parameters as $row){
//                $about=explode("^",$row);
//                $money=$about[1]*100;
////                $total_fee*=100;
//                $ali_account=$about[0];
//                $orderid=$ordern;
//                $fid=($i++==0)?$aid:$mid;
//                $str="insert pft_member_alipay set fid=$fid,orderid='$orderid',total_fee=$total_fee,money=$money,ali_account='$ali_account',rectime=now()";
//                $GLOBALS['le']->query($str);
//            }
            
            /*只更新订单支付状态*/
            // include("/var/www/html/alipay/order_pay.php");

        }
    }

    //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
        
    echo "success";        //请不要修改或删除
    logResult("2:$trade_no:$out_trade_no:$trade_status\n");
    
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else {
    //验证失败
    echo "fail";
    logResult("3:$trade_no:$out_trade_no:$trade_status\n");

    //调试用，写文本函数记录程序运行情况是否正常
    //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
}
?>